#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Project: spd-sxmcc
"""
@author: lyndon
@time Created on 2019/1/3 13:39
@desc  带参数的函数
        不想要修改函数的调用方式，但是还想在原来的函数前后添加功能
      下面的timer就是一个装饰器函数，只是对一个函数有一些装饰作用
"""
import time
from functools import wraps  #################

FLAG = True


# 装饰带参数函数的装饰器
def timer_out(flag):
    def timer(f):  # 装饰器函数
        @wraps(f)  ######################
        def inner(*args, **kwargs):
            if flag:
                # 装饰前执行
                start = time.time()
                ret = f(*args, **kwargs)  # 被装饰的函数
                # 装饰后执行
                end = time.time()
                print(end - start)
                return ret
            else:
                ret = f(*args, **kwargs)
                return ret
        return inner
    return timer

# func = timer(func)
# func()

@timer_out(FLAG)  # 语法糖 @装饰器函数名 相当于写了func = timer(func)
def erguotou():
    time.sleep(0.01)
    print('erguotoutoutou')
    return '新年好'


@timer_out(FLAG)
def wahaha():
    time.sleep(0.01)
    print('wahahahahahaha')
    return '新年好'


r = wahaha()
print(r)

r1 = erguotou()
print(r1)

# 如果不导入wraps的话，这里就打印出来inner
# 如果导入warps，并且在装饰器的inner加上装饰的话，这里就可以打印出func的名字
print(erguotou.__name__)
print(erguotou.__doc__)

print(wahaha.__name__)  # 一个查看字符串函数名
print(wahaha.__doc__)
